import tab from './tab'
import auth from './auth'
import modal from './modal'
import { checkPermi } from '@/utils/permission'

export default {
  install(Vue) {
    // 页签操作
    Vue.prototype.$tab = tab
    // 认证对象
    Vue.prototype.$auth = auth
    // 模态框对象（提供 msg/msgSuccess/msgError 等）
    Vue.prototype.$modal = modal
    // 兼容 web 风格的 $message 别名（映射到 modal 的方法）
    Vue.prototype.$message = {
      success: (text) => modal.msgSuccess ? modal.msgSuccess(text) : modal.msg(text),
      error: (text) => modal.msgError ? modal.msgError(text) : modal.msg(text),
      info: (text) => modal.msg ? modal.msg(text) : modal.msg(text)
    }

    // 全局权限指令 v-hasPermi="['perm:action']" — 按需显示/隐藏元素
    Vue.directive && Vue.directive('hasPermi', {
      // 当被绑定的元素插入到 DOM 时
      inserted(el, binding, vnode) {
        try {
          const perms = binding.value
          const ok = checkPermi(perms)
          if (!ok) {
            // 移除节点或隐藏
            if (el && el.parentNode) el.parentNode && el.parentNode.removeChild(el)
            else el.style && (el.style.display = 'none')
          }
        } catch (e) {
          // 在异常情况下隐藏元素以避免泄露权限
          try { if (el && el.parentNode) el.parentNode.removeChild(el) } catch (err) { if (el.style) el.style.display = 'none' }
        }
      }
    })
  }
}